package com.ds.infra.ibatis.type;

import java.util.HashMap;
import java.util.Map;

/**
 * 作用： 类型处理器注册表，用于管理不同类型的TypeHandler
 *
 * @author WeiShaoying
 */
public class TypeHandlerRegistry {

    // 类型处理器映射表
    private final Map<Class<?>, TypeHandler<?>> typeHandlerMap = new HashMap<>();

    // 构造函数，初始化一些基本的类型处理器
    public TypeHandlerRegistry() {
        register(String.class, new StringTypeHandler());

        register(Integer.class, new IntegerTypeHandler());
        register(int.class, new IntegerTypeHandler());

        register(Long.class, new LongTypeHandler());
        register(long.class, new LongTypeHandler());

        // 添加更多基本类型...
    }

    public <T> void register(Class<T> type, TypeHandler<? extends T> handler) {
        typeHandlerMap.put(type, handler);
    }

    @SuppressWarnings("unchecked")
    public <T> TypeHandler<T> getTypeHandler(Class<T> type) {
        return (TypeHandler<T>) typeHandlerMap.get(type);
    }

    // 添加获取Object类型处理器的方法
    public TypeHandler<?> getTypeHandlerForObject(Object value) {
        if (value == null) {
            return null;
        }
        return getTypeHandler(value.getClass());
    }
}
